Uupstream pull request: https://gitlab.gnome.org/GNOME/gtk/merge_requests/1080

From 3ff8f70b9686205f0618d7a479fd42a457b90165 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <encukou@gmail.com>
Date: Tue, 3 Sep 2019 13:54:49 +0200
Subject: [PATCH 1/3] Make gtk-builder-convert compatible with Python 3

- Convert tabs to spaces
- Use print as a function, even on Python 2
- Output a binary file, or decode for stdout
---
 gtk/gtk-builder-convert | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/gtk/gtk-builder-convert b/gtk/gtk-builder-convert
index ea737de195..41f7a8c941 100755
--- a/gtk/gtk-builder-convert
+++ b/gtk/gtk-builder-convert
@@ -36,6 +36,7 @@ Examples:
 
 Report bugs to http://bugzilla.gnome.org/."""
 
+from __future__ import print_function
 import getopt
 import os
 import sys
@@ -259,7 +260,7 @@ class GtkBuilderConverter(object):
         for node in objects:
             self._convert(node.getAttribute("class"), node)
             if self._get_object(node.getAttribute('id')) is not None:
-		print "WARNING: duplicate id \"" + node.getAttribute('id') + "\""
+                print("WARNING: duplicate id \"" + node.getAttribute('id') + "\"")
             self.objects[node.getAttribute('id')] = node
 
         # Convert Gazpachos UI tag
@@ -277,8 +278,7 @@ class GtkBuilderConverter(object):
         #                   reverse=True):
         # when we can depend on python 2.4 or higher
         root_objects = self.root_objects[:]
-        root_objects.sort(lambda a, b: cmp(b.getAttribute('id'),
-                                           a.getAttribute('id')))
+        root_objects.sort(key=lambda a: a.getAttribute('id'), reverse=True)
         for obj in root_objects:
             self._interface.childNodes.insert(0, obj)
 
@@ -461,8 +461,8 @@ class GtkBuilderConverter(object):
             if signal_name in ['activate', 'toggled']:
                 action.appendChild(signal)
             else:
-                print 'Unhandled signal %s::%s' % (node.getAttribute('class'),
-                                                   signal_name)
+                print('Unhandled signal %s::%s' % (node.getAttribute('class'),
+                                                   signal_name))
 
         if not uimgr.childNodes:
             child = self._dom.createElement('child')
@@ -481,8 +481,8 @@ class GtkBuilderConverter(object):
         for accelerator in get_accelerator_nodes(node):
             signal_name = accelerator.getAttribute('signal')
             if signal_name != 'activate':
-                print 'Unhandled accelerator signal for %s::%s' % (
-                    node.getAttribute('class'), signal_name)
+                print('Unhandled accelerator signal for %s::%s' % (
+                    node.getAttribute('class'), signal_name))
                 continue
             accelerator.removeAttribute('signal')
             child.appendChild(accelerator)
@@ -747,7 +747,7 @@ def _indent(output):
     return s.stdout.read()
 
 def usage():
-    print __doc__
+    print(__doc__)
 
 def main(args):
     try:
@@ -788,10 +788,13 @@ def main(args):
 
     xml = _indent(conv.to_xml())
     if output_filename == "-":
-        print xml
+        if isinstance(xml, str):
+            print(xml)
+        else:
+            print(xml.decode(sys.stdout.encoding))
     else:
-        open(output_filename, 'w').write(xml)
-        print "Wrote", output_filename
+        open(output_filename, 'wb').write(xml)
+        print("Wrote", output_filename)
 
     return 0
 
-- 
2.22.0


From 4f8efe3ae09ee69657b83399a118b5252f25d830 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <encukou@gmail.com>
Date: Tue, 3 Sep 2019 14:53:05 +0200
Subject: [PATCH 2/3] gtk-builder-convert: Remove compat code for Python 2.3
 and below

---
 gtk/gtk-builder-convert | 13 +------------
 1 file changed, 1 insertion(+), 12 deletions(-)

diff --git a/gtk/gtk-builder-convert b/gtk/gtk-builder-convert
index 41f7a8c941..a16f83b217 100755
--- a/gtk/gtk-builder-convert
+++ b/gtk/gtk-builder-convert
@@ -48,12 +48,7 @@ DIALOGS = ['GtkDialog',
            'GtkMessageDialog']
 WINDOWS = ['GtkWindow'] + DIALOGS
 
-# The subprocess is only available in Python 2.4+
-try:
-    import subprocess
-    subprocess # pyflakes
-except ImportError:
-    subprocess = None
+import subprocess
 
 def get_child_nodes(node):
     assert node.tagName == 'object'
@@ -271,12 +266,6 @@ class GtkBuilderConverter(object):
         for node in self._dom.getElementsByTagName("accessibility"):
             self._convert_accessibility(node)
 
-        # Output the newly created root objects and sort them
-        # by attribute id
-        # FIXME: Use sorted(self.root_objects,
-        #                   key=lambda n: n.getAttribute('id'),
-        #                   reverse=True):
-        # when we can depend on python 2.4 or higher
         root_objects = self.root_objects[:]
         root_objects.sort(key=lambda a: a.getAttribute('id'), reverse=True)
         for obj in root_objects:
-- 
2.22.0


From b5ea5a0cf1f12be5072b9f06d1127a8977414916 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <encukou@gmail.com>
Date: Tue, 3 Sep 2019 14:56:14 +0200
Subject: [PATCH 3/3] gtk-builder-convert: Update bug report URL

Also, use a newline instead of period at the end to make the
URL easy to copy
---
 gtk/gtk-builder-convert | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gtk/gtk-builder-convert b/gtk/gtk-builder-convert
index a16f83b217..b1faba822e 100755
--- a/gtk/gtk-builder-convert
+++ b/gtk/gtk-builder-convert
@@ -34,7 +34,8 @@ When OUTPUT is -, write to standard output.
 Examples:
   gtk-builder-convert preference.glade preferences.ui
 
-Report bugs to http://bugzilla.gnome.org/."""
+Report bugs to https://gitlab.gnome.org/GNOME/gtk/issues/new
+"""
 
 from __future__ import print_function
 import getopt
-- 
2.22.0

